Fastify is a small Node framework for developing back end web apps.
In this article, we’ll look at how to create back end apps with Fastify.
Not Found Response
We can call callNotFound
to invoke the custom not found handler.
For example, we can write:
const fastify = require('fastify')({})
fastify.setNotFoundHandler({
preValidation: (req, reply, done) => {
done()
},
preHandler: (req, reply, done) => {
done()
}
}, function (request, reply) {
reply.send('not found')
})
fastify.get('/', function(req, reply) {
reply.callNotFound()
})
const start = async () => {
try {
await fastify.listen(3000, '0.0.0.0')
} catch (err) {
fastify.log.error(err)
process.exit(1)
}
}
start()
We call setNotFoundHandler
to add the not found handler.
Then we call reply.callNotFound
in our event handler to redirect to the not found handler.
So we see not found
as the response of the /
route.
Response Time
We can get the response time with the getResponseTime
method.
For example, we can write:
const fastify = require('fastify')({})
fastify.get('/', function(req, reply) {
const milliseconds = reply.getResponseTime()
reply.send(milliseconds)
})
const start = async () => {
try {
await fastify.listen(3000, '0.0.0.0')
} catch (err) {
fastify.log.error(err)
process.exit(1)
}
}
start()
We call it in our handler to get the response time.
Response Content-Type
We can set the response Content-Type
header with the reply.type
method.
For example, we can write:
const fastify = require('fastify')({})
fastify.get('/', function(req, reply) {
reply.type('text/html').send()
})
const start = async () => {
try {
await fastify.listen(3000, '0.0.0.0')
} catch (err) {
fastify.log.error(err)
process.exit(1)
}
}
start()
Then we set the Content-Type
response header with the reply.type
method.
Raw Response
We can send a raw response with the reply.raw
property.
For instance, we can write:
const fastify = require('fastify')({})
fastify.get('/', function(req, reply) {
reply.setCookie('session', 'value', { secure: false })
reply.raw.writeHead(200, { 'Content-Type': 'text/plain' })
reply.raw.write('ok')
reply.raw.end()
})
const start = async () => {
try {
await fastify.listen(3000, '0.0.0.0')
} catch (err) {
fastify.log.error(err)
process.exit(1)
}
}
start()
We call setCookie
to set our response cookie.
reply.raw.writeHeader
adds the response header.
reply.raw.write
writes the response body.
reply.raw.end
ends the response.
Set if a Response is Sent
We can set the sent
property of the response.
For example, we can write:
const fastify = require('fastify')({})
fastify.get('/', function(req, reply) {
reply.sent = true
reply.raw.end('hello world')
return Promise.resolve('this will be skipped')
})
const start = async () => {
try {
await fastify.listen(3000, '0.0.0.0')
} catch (err) {
fastify.log.error(err)
process.exit(1)
}
}
start()
to set the reply.sent
to true
to mark the response as sent.
Send a Response
We can send the response with the reply.send
method.
For instance, we can write:
const fastify = require('fastify')({})
fastify.get('/', function(req, reply) {
reply.send({ hello: 'world' })
})
const start = async () => {
try {
await fastify.listen(3000, '0.0.0.0')
} catch (err) {
fastify.log.error(err)
process.exit(1)
}
}
start()
to send the response.
Conclusion
We can set various parts of a response and send it with Fastify.